iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
佛心分享-刷題不只是刷題

CPE C++ 刷題系列 第 19

CPE C++ 刷題 Day 19

  • 分享至 

  • xImage
  •  

今天來解YKL20(UVA10050):Hartals

Hartals

https://ithelp.ithome.com.tw/upload/images/20241003/20155574gE7P5jO6ar.png
https://ithelp.ithome.com.tw/upload/images/20241003/20155574QxBDdg9VtF.png

T => 測試案例數量
N => 天數
P => 黨的數量
接下來的代表那黨要罷工所隔的天數

friday和Saturday是休息日,所以不需要納入考量
最後計算出被罷工影響的天數

例子

1
14
3
3=>每隔 3 天罷工一次
4=>每隔 4 天罷工一次
8=>每隔 8 天罷工一次

1   2   3   4   5   6   7
Su  Mo  Tu  We  Th  Fr  Sa
1   2   x   x   3   4   x   # 政黨 1(每 3 天罷工)
x   x   3   x   x   5   6   # 政黨 2(每 4 天罷工)
x   x   x   x   x   x   x   # 政黨 3(每 8 天罷工)

1: Su
2: Mo
3: Tu  x   <- 政黨 1
4: We  x   <- 政黨 2
5: Th  x   <- 沒有政黨罷工
6: Fr  x   <- 星期五,無法罷工
7: Sa  x   <- 星期六,無法罷工
8: Su  x   <- 政黨 3
9: Mo  x   <- 政黨 1
10: Tu x   <- 政黨 2
11: We x   <- 沒有政黨罷工
12: Th x   <- 政黨 1
13: Fr x   <- 星期五,無法罷工
14: Sa x   <- 星期六,無法罷工

1.先計算第一個黨的罷工日期,並存進vector
2.再計算第二個黨的罷工日期,並存進vector
...
最後計算除了星期五和六之外的罷工數量

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int T;
    cin >> T; 

    while (T--) {
        int N, P;
        cin >> N; 
        cin >> P; 
        
        vector<bool> days(N + 1, false); 

        vector<int> party(P); 
        for (int i = 0; i < P; i++) { 
            cin >> party[i]; 
            int tmp = party[i];
            for (int k = tmp; k <= N; k += tmp) {
                
                if (k % 7 != 0 && k % 7 != 6) {
                    days[k] = true; 
                }
            }
        }

        
        int count = 0;
        for (int day = 1; day <= N; day++) {
            if (days[day]) {
                count++;
            }
        }
        
        cout << count << endl; 
    }
    return 0;
}

上一篇
CPE C++ 刷題 Day 18
下一篇
CPE C++ 刷題 Day 20
系列文
CPE C++ 刷題20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言